Niemand möchte zwar die Hochleistungsspeicherung und die SQL-Abfrage-Engines missen, über die proprietäre Enterprise-Datenbankprodukte verfügen, doch die Möglichkeit zum offenen Datenaustausch in einem HTTP-freundlichen Textformat zwischen einzelnen Anwendungen macht XML sehr beliebt. In diesem Artikel werden wir uns Sybase Adaptive Server Enterprise (ASE) 12.5 und dessen verschiedene Methoden zur Speicherung und Verarbeitung von XML-Daten ansehen. Außerdem werden wir die OrderXml-Muster-Java-Custom-Klasse (eine Unterklasse der JXml-Standardklasse) diskutieren, die in ASE 12.5 enthalten ist.
Finden des Quellcode
Der Quellcode und Javadoc für die in diesem Artikel benutzte OrderXml-Klasse ist (in Abhängigkeit von Ihrer Plattform) in folgenden Sybase Server-Verzeichnissen zu finden:
UNIX: $SYBASE/ASE-12_5/sample/JavaSql
Windows NT: %SYBASE%ASE-12_5sampleJavaSql
Einbindung von XML in Sybase ASE
Die meisten großen Datenbank-Anbieter haben zwar bedeutende Schritte unternommen, um XML über grundlegende Erweiterungen in SQL-Anweisungen und serverseitige Vorlagen zu implementieren, doch Sybase hat in seinem Flaggschiff-Produkt einen weit konsequenteren Schritt in Richtung XML unternommen. Sybase ASE hat eine leistungsfähige serverseitige Java VM.
Zu den leistungsfähigsten XML-Verarbeitungsfunktionen von ASE gehört die Fähigkeit, eigene Java-Custom-Klassen zu benutzen. Sie können die Methoden dieser Klassen benutzen, um Daten aus XML-Dokumenten zu extrahieren und sie als normale SQL-Datentypen zu speichern oder sogar die Methoden selbst als Datentypen für Spalten in SQL-Tabellen benutzen. Diese Java Custom Class-Datentypen können Methoden haben, um Elemente aus den gespeicherten XML-Dokumenten nach Bedarf zu validieren, zu extrahieren sowie zu aktualisieren, hinzuzufügen oder zu löschen. Diese Klassen können sogar SQL-Tabellen anlegen und mit verschiedenartigen, aus dem XML-Dokument extrahierten Elementen ausfüllen, damit diese von herkömmlichen, nicht XML-fähigen Anwendungen benutzt werden können.
Speicherung von XML
Sybase ASE kann XML-Daten auf dreierlei Art speichern: Element-Speicherung, Dokument-Speicherung und Hybrid-Speicherung (eine Kombination aus der Element- und der Dokument-Methode).
Für die Zwecke dieser Diskussion werden wir als Muster das folgende OrderXml-Dokument benutzen:
<?xml version="1.0"?><Order> <Date>1999/07/04</Date> <CustomerId>123</CustomerId> <CustomerName>Acme Alpha</CustomerName> <Item> <ItemId> 987</ItemId> <ItemName>Coupler</ItemName> <Quantity>5</Quantity> </Item> <Item> <ItemId>654</ItemId> <ItemName>Connector</ItemName> <Quantity unit="12">3</Quantity> </Item> <Item> <ItemId>579</ItemId> <ItemName>Clasp</ItemName> <Quantity>1</Quantity> </Item> </Order>
Das folgende SQL legt die Tabellen an, die mit den Musterdaten benutzt werden sollen:
create table orders (customer_id varchar(5) not null, order_date datetime not null, item_id varchar(5) not null, quantity int not null, unit smallint default 1) create table customers (customer_id varchar(5) not null unique, customer_name varchar(50) not null) create table items (item_id varchar(5) unique, item_name varchar(20))
Das Standard-SQL zum Ausfüllen der Auftragsorder-Tabellen würde folgendermaßen aussehen:
insert into customers values("123", "Acme Alpha")insert into orders values ("123", "2002/05/07", "987", 5, 1) insert into orders values ("123", "2002/05/07", "654", 3, 12) insert into orders values ("123", "2002/05/07", "579", 1, 1)
insert into items values ("987", "Widget") insert into items values ("654", "Medium connector") insert into items values ("579", "Type 3 clasp")
Das folgende SQL wählt die Daten aus der Datenbank aus, wenn sie gespeichert worden sind:
select order_date as Date, c.customer_id as CustomerId, customer_name as CustomerName, o.item_id as ItemId, i.item_name as ItemName, quantity as Quantity, o.unit as unit from customers c, orders o, items I where c.customer_id=o.customer_id and o.item_id=i.item_id
Die Ausgabe sieht in etwa so aus wie das, was Sie in dieser Tabelle sehen:
Date | July 4 1999 | July 4 1999 | July 4 1999 |
CustomerID | 123 | 123 | 123 |
CustomerName | Acme Alpha | Acme Alpha | Acme Alpha |
ItemId | 987 | 654 | 579 |
ItemName | Coupler | Connector | Clasp |
Quantity | 5 | 3 | 1 |
Unit | 1 | 12 | 1 |
SQL-Ausgabe
Als Nächstes wollen wir uns Beispiele für die Speichermethoden und -techniken ansehen, um eine Tabelle current_orders anzulegen, die anstelle der oben angelegten und ausgefüllten Tabelle orders benutzt werden soll.
Neueste Kommentare
Noch keine Kommentare zu Speichern und Abrufen von XML-Daten in Sybase mit Java-Custom-Klassen
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.